import axios from "axios";
import { getToken, removeToken } from "./cookie";

//不同得功能，通过axios请求得是不同得接口地址
// 127.0.0.1:19090 网关-端口号
const service = axios.create({
    baseURL: "/dev-api",// baseURL--将请求中公共得部分提取出来--http://127.0.0.1:19090 -- 使用代理服务器
    timeout: 5000, // timeout--在这个时间内5s，收到了后端返回来得请求，说明是正常得，如果超时了，这个请求中断，并返回一个请求超时错误
});

// 请求拦截器-将前端发送请求的时候，先加点东西再发送给后端

service.interceptors.request.use(
    (config) => {
        if (getToken()) {
            config.headers["Authorization"] = "Bearer " + getToken();
        }
        return config;
    },
    (error) => {
        console.log(error)
        Promise.reject(error);
      }
)

service.interceptors.response.use( // 响应拦截器，将响应代码做一个改动
    (res) => {//res 响应数据
    // 未设置状态码则默认成功状态
    const code = res.data.code;
    const msg = res.data.msg;
    if(code  == 3001){
        ElMessage.error(msg);
        removeToken()
        router.push('/oj/login')
    }else if (code !== 1000) {
        ElMessage.error(msg);
        return Promise.reject(new Error(msg));
    } else {
        //将返回得数据做了一个解析
        return Promise.resolve(res.data);
    }
    },
    (error) => {
        return Promise.reject(error);
    }
);





export default service; // 让其他模块可以导入service


//http://localhost:5173/dev-api/sysUser/login -- 拼接过后得


//同源策略
// 同源策略指的就是,浏览器出于安全考虑,实施的一种策略,即只允许来自同一源(即协议+域名+端口都相同)的请求访问资源。否则就会导致致跨域问题

// 例如http://xxxx.com->https://xxxx.com存在跨域协议想
// 例如 127.x.x.x:8001 -> 127.x.x:8002存在跨域 端口不同
// 例如www.xxxxx.com ->www.yyy.com存在跨域名不同

// 解决办法--  使用代理服务器， 让前端服务器->请求代理服务器(和前端是同源得，就没有跨域问题了)->让代理服务器转发给后端